/** 
 * JPanel mit dem man einem Verlag weitere Angaben Hinzufuegen kann.
 * 
 * Datei: PanelVerlagErgaenzen.java         Autor: Simon Schindelmann 
 * Datum: 09.12.11                          Version: 0.1
 * 
 */
package medienverwaltung.simulation;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import medienverwaltung.Verlag;
import medienverwaltung.Verlagsverwalter;
import kommunikation.Email;
import kommunikation.Telefonnummer;
import kommunikation.UngueltigeEingabeAusnahme;
import kommunikation.Wohnsitzadresse;
import kommunikation.Parser.NichtImAlphabetAusnahme;

public class PanelVerlagErgaenzen extends JPanel
{
  private static final long serialVersionUID = 4363531681673740757L;
  //Speichert die aktuelle Sprache die verwendet wird.
  Uebersetzung uebersetzung = Uebersetzung.gibSprache ();
  JButton hinzufuegenAdresse, hinzufuegenTelefon, hinzufuegenEmail;

  JLabel name, strasse, hausnummer, ort, plz, telefon, email, info,
      leer;

  JTextField txt_name, txt_strasse, txt_hausnummer, txt_ort, txt_plz,
      txt_telefon, txt_email, txt_statusA, txt_statusT, txt_statusE;


  /**
   * Das Layout wird gesetzt und die Labels, Textfelder und Buttons 
   * werden initialisiert und dem JPanel hinzugefuegt.
   */
  public PanelVerlagErgaenzen ()
  {
    init ();
    setLayout (new GridLayout (11, 2));
    add (info);
    add (leer);
    add (name);
    add (txt_name);
    add (strasse);
    add (txt_strasse);
    add (hausnummer);
    add (txt_hausnummer);
    add (plz);
    add (txt_plz);
    add (ort);
    add (txt_ort);
    add (hinzufuegenAdresse);
    add (txt_statusA);
    add (telefon);
    add (txt_telefon);
    add (hinzufuegenTelefon);
    add (txt_statusT);
    add (email);
    add (txt_email);
    add (hinzufuegenEmail);
    add (txt_statusE);
  }


  /**
   * Hier werden die Labels, Textfelder, Buttons und ActionListener 
   * initialisiert.
   */
  public void init ()
  {
    info = new JLabel ("<html>  "+ uebersetzung.lokal
                .gibUebersetzung ("Verlag mit den entsprechenden Namen " +
                		"muss vorhanden sein bevor weitere Informaten " +
                		"hinzugefuegt werden") + "\n\n</html>");
    leer = new JLabel ("<html>\n\n</html>");
    name = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Name") + ": ");
    strasse = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Strasse") + ": ");
    hausnummer = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Hausnummer") + ": ");
    plz = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Postleitzahl") + ": ");
    ort = new JLabel ("  " + uebersetzung.lokal.gibUebersetzung ("Ort")
        + ": ");
    email = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("E-mail") + ": ");
    telefon = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Telefonnummer") + ": ");

    txt_name = new JTextField ();
    txt_strasse = new JTextField ();
    txt_hausnummer = new JTextField ();
    txt_plz = new JTextField ();
    txt_ort = new JTextField ();
    txt_email = new JTextField ();
    txt_telefon = new JTextField ();
    txt_statusA = new JTextField ();
    txt_statusT = new JTextField ();
    txt_statusE = new JTextField ();
    txt_statusA.setEditable (false);
    txt_statusT.setEditable (false);
    txt_statusE.setEditable (false);

    hinzufuegenAdresse = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Adresse Hinzufuegen"));
    hinzufuegenTelefon = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Telefon Hinzufuegen"));
    hinzufuegenEmail = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Email Hinzufuegen"));

    hinzufuegenAdresse.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          hinzufuegenAdresse ();
        }
        catch (UngueltigeEingabeAusnahme e1)
        {
          JOptionPane.showMessageDialog (null, "" + e1.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
          txt_statusA.setBackground (Color.red);
        }
        catch (NichtImAlphabetAusnahme e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
          txt_statusA.setBackground (Color.red);
        }
        catch (NullPointerException e3)
        {
        JOptionPane.showMessageDialog (null, "" +
        uebersetzung.lokal.gibUebersetzung
        ("Dieser Verlag existiert nicht"),
        null, JOptionPane.WARNING_MESSAGE);
        txt_statusA.setBackground (Color.red);
        }
      }
    });

    hinzufuegenTelefon.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          hinzufuegenTelefon ();
        }
        catch (UngueltigeEingabeAusnahme e1)
        {
          JOptionPane.showMessageDialog (null, "" + e1.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
          txt_statusT.setBackground (Color.red);
        }
        catch (NichtImAlphabetAusnahme e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
          txt_statusT.setBackground (Color.red);
        }
        catch (NullPointerException e3)
        {
        JOptionPane.showMessageDialog (null, "" +
        uebersetzung.lokal.gibUebersetzung
        ("Dieser Verlag existiert nicht"),
        null, JOptionPane.WARNING_MESSAGE);
        txt_statusT.setBackground (Color.red);
        }
      }
    });

    hinzufuegenEmail.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          hinzufuegenEmail ();
        }
        catch (UngueltigeEingabeAusnahme e1)
        {
          JOptionPane.showMessageDialog (null, "" + e1.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
          txt_statusE.setBackground (Color.red);
        }
        catch (NichtImAlphabetAusnahme e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
          txt_statusE.setBackground (Color.red);
        }
        catch (NullPointerException e3)
        {
        JOptionPane.showMessageDialog (null, "" +
        uebersetzung.lokal.gibUebersetzung
        ("Dieser Verlag existiert nicht"),
        null, JOptionPane.WARNING_MESSAGE);
        txt_statusE.setBackground (Color.red);
        }
      }
    });
  }


  /**
   * Fuegt den Verlag eine weitere Adresse hinzu
   */
  public void hinzufuegenAdresse ()
  {
    Verlagsverwalter vw = new Verlagsverwalter ();
    Verlag v;
    Wohnsitzadresse wsa;
    if (txt_name.getText ().isEmpty () == true)
    {
      txt_statusA.setBackground (Color.RED);
    }
    else
    {
      if (txt_strasse.getText ().isEmpty () == false
          && txt_hausnummer.getText ().isEmpty () == false
          && txt_plz.getText ().isEmpty () == false
          && txt_ort.getText ().isEmpty () == false)
      {
        v = vw.gibVerlag (txt_name.getText ());
        wsa = new Wohnsitzadresse (txt_ort.getText (), txt_plz.getText (), 
            txt_hausnummer.getText (), txt_strasse.getText ());
        v.adresseHinzufuegen (wsa);
        txt_statusA.setBackground (Color.GREEN);
        clear ();
      }
      else
      {
        txt_statusA.setBackground (Color.RED);
      }
    }
  }


  /**
   * Fuegt en Verlag eine weitere Telefonnummer hinzu
   */
  public void hinzufuegenTelefon ()
  {
    if (txt_name.getText ().isEmpty () == true)
    {
      txt_statusT.setBackground (Color.RED);
    }
    else
    {
      Verlagsverwalter vw = new Verlagsverwalter ();
      Verlag v;
      Telefonnummer t;
      if (txt_telefon.getText ().isEmpty () == false)
      {
        v = vw.gibVerlag (txt_name.getText ());
        t = new Telefonnummer (txt_telefon.getText ());
        v.telefonHinzufuegen (t);
        txt_statusT.setBackground (Color.GREEN);
        txt_telefon.setText ("");
      }
      else
      {
        txt_statusT.setBackground (Color.RED);
      }
    }
  }


  /**
   * Fuegt den Verlag eine weitere Email-Adresse hinzu
   */
  public void hinzufuegenEmail ()
  {
    if (txt_name.getText ().isEmpty () == true)
    {
      txt_statusE.setBackground (Color.RED);
    }
    else
    {
      Verlagsverwalter vw = new Verlagsverwalter ();
      Verlag v;
      Email e;
      if (txt_email.getText ().isEmpty () == false)
      {
        v = vw.gibVerlag (txt_name.getText ());
        e = new Email (txt_email.getText ());
        v.emailHinzufuegen (e);
        txt_statusE.setBackground (Color.GREEN);
        txt_email.setText ("");
      }
      else
      {
        txt_statusE.setBackground (Color.RED);
      }
    }
  }
  
  
  /**
   * Wenn das Ergaenzen eines Verlags erfolgreich war, wird der Inhalt
   * der Textfelder entfernt.
   */
  public void clear ()
  {
    txt_strasse.setText ("");
    txt_hausnummer.setText ("");
    txt_plz.setText ("");
    txt_ort.setText ("");
  }
}
